﻿using System.Collections.Generic;
using MJD.Comunes.DtoEntidades;
using MJD.Comunes.Entidades;
using MJD.Logica.Traductores;
using MJD.Transaccional.Comandos.Fabricas;
using MJD.Transaccional.Comandos.Interfaces;

namespace MJD.Logica.Controladores
{
    /// <summary> Clase que hace de controlador para la entidad ciudad </summary>
    /// <remarks>clase que llama a los comandos que son requeridos para las acciones</remarks>
    public class ControladorAseguradora
    {
        /// <summary> Metodo que inserta o modifica los datos de una aseguradora </summary>
        /// <param name="aseguradora">datos de la aseguradora a insertar o modificar</param>
        /// <returns>true si inserto o modifico false si no</returns>
        public bool InsertarOModifcarAseguradora(DtoAseguradora aseguradora)
        {
            Aseguradora entidad = TraductorAseguradora.TraducirDto(aseguradora);
            entidad.Sucursales = TraductorSucursal.TraducirListaDto(aseguradora.Sucursales);
            IComando<bool> comando;
            comando = entidad.Sucursales.Count >0 ? FabricaComandosAseguradora.ObtenerComandoInsertarModificar(entidad) : 
                                        FabricaComandosAseguradora.ObtenerComandoInsertarModificarCompleto(entidad);
            return comando.Ejecutar();
        }


        /// <summary> metodo que inserta o modifica los datos de una sucursal </summary>
        /// <param name="sucursal">datos de la sucursal a insertar o modificar</param>
        /// <returns>true si inserto o modifico o false sino</returns>
        public bool InsertarOModificarSucursal(DtoSucursal sucursal)
        {
            IComando<bool> comando =
                FabricaComandosSucursal.ObtenerComandoInsertarModificar(TraductorSucursal.TraducirDto(sucursal));
            return comando.Ejecutar();
        }


        /// <summary> Metodo que consulta una aseguradora dado los parametros indicados </summary>
        /// <param name="consulta">datos para realizar la consulta de la aseguradora</param>
        /// <returns>Lista de aseguradoras que cumplen con los parametros de busquedas</returns>
        public List<DtoAseguradora> ConsultarAseguradoras(DtoAseguradora consulta)
        {
            IComando<IList<Aseguradora>> comando = FabricaComandosAseguradora.ConsultarAseguradoras(TraductorAseguradora.TraducirDto(consulta));
            List<DtoAseguradora> retorno = TraductorAseguradora.TraducirListaEntidad(comando.Ejecutar());
            return retorno;
        }
    }
}
